<?php  
/*考点模型*/
class Test_point_model extends CI_Model
{

	var $table='test_point';

	function __construct()
	{
		parent::__construct();
		
	}

	/**
	 * 返回数据表总条目个数
	 * @return [type] [description]
	 */
	function count_all()
	{
		return $this->db->count_all($this->table);
	}

	/**
	 * 获得所有的条目
	 * @return [type] [description]
	 */
	function get_all()
	{
		$res=$this->db->get($this->table)->result_array();
		return $res;
	}

	/**
	 * 通过id返回条目
	 * @param  [type] $id [description]
	 * @return [type]     [description]
	 */
	function get_by_id($id)
	{
		return $this->db->get_where($this->table, array('id' => $id ))->row_array();
	}


	/**
	 * 添加一个条目
	 * @param [type] $item [description]
	 */
	function add($item)
	{
		return	$this->db->insert($this->table,$item);
	}

	/**
	 * 删除一个条目
	 * @param  [type] $id [description]
	 * @return [type]     [description]
	 */
	function delete($id)
	{
		return $this->db->delete($this->table, array('id' => $id ));

	}

	/**
	 * 更新一个条目
	 * @param  [type] $id   [description]
	 * @param  [type] $item [description]
	 * @return [type]       [description]
	 */
	function update($id,$item)
	{
		$this->db->where('id', $id);
		return $this->db->update($this->table,$item);
	}

	/**
	 * 根据考点的id查询相关的知识点
	 * @param  [type] $test_point_id [description]
	 * @return [type]                [description]
	 */
	function get_relative_knowledge_points($test_point_id)
	{

		return $this->db->get_where('knowledge_point', array('test_point_id' => $test_point_id ))->result_array();
	}


	

	/**
	 * 通过考点得到相关的模块
	 * @param  [type] $test_point_id [description]
	 * @return [type]                [description]
	 */
	function get_relative_modules($test_point_id)
	{
		$sql='
select m.id,m.name 
from test_point_in_module as tpim,module as m 
where tpim.module_id=m.id and m.type=0 and test_point_id=?';
		return $this->db->query($sql,$test_point_id)->result_array();
	}

	/**
	 * 删除和这个考点相关的模块关系
	 * @param  [type] $test_point_id [description]
	 * @return [type]                [description]
	 */
	function delete_relative_modules($test_point_id)
	{
		$sql='delete from test_point_in_module where test_point_id = ?';
		return $this->db->query($sql,array($test_point_id));
	}

	/**
	 * 添加和这个考点相关的模块关系
	 * @param [type] $test_point_id [description]
	 * @param [type] $module_ids    [description]
	 */
	function add_relative_modules($test_point_id,$module_ids)
	{
		foreach ($module_ids as $module_id ) {
			$relation = array(
				'module_id' => $module_id,
				'test_point_id' => $test_point_id
				 );
			if(!$this->db->insert('test_point_in_module',$relation))
				return FALSE;
		}
		return TRUE;
	}

	/**
	 * 尝试删除一个考点，处理相关引用
	 * @param  [type] $test_point_id [description]
	 * @return [type]                [description]
	 */
	function delete_cascade($test_point_id)
	{
		//如果有考题引用这个考点，不能删除
		$sql='select * from question as q where q.test_point_id = ?';
		if(count($this->db->query($sql,array($test_point_id))->result_array()))
			return FALSE;
		//如果有模块引用这个考点，不能删除
		$sql='select * from test_point_in_module as tpim where tpim.test_point_id = ?';
		if(count($this->db->query($sql,array($test_point_id))->result_array()))
			return FALSE;
		//如果有知识点引用这个考点，连带删除
		
		//删除引用的图片
		$sql='select * from knowledge_point where test_point_id=?';
		$knowledge_points=$this->db->query($sql,$test_point_id)->result_array();
		foreach ($knowledge_points as $item) {
			$this->delete_files_by_dir('./uploads/exp/'.$item['id']);
			rmdir('./uploads/exp/'.$item['id']);
		}
		//删除数据库中的记录
		$sql='delete from knowledge_point where test_point_id = ?';
		if(!$this->db->query($sql,array($test_point_id)))
			return FALSE;
		$sql='delete from test_point where id = ?';
		if($this->db->query($sql,array($test_point_id)))
			return TRUE;
	}

	//根据目录删除目录下的所有文件
	function delete_files_by_dir($dir) {
	  	//删除目录下的文件：
	  	$dh=opendir($dir);
	  	while ($file=readdir($dh)) {
	    	if($file!="." && $file!="..") {
	     		$fullpath=$dir."/".$file;
		      	if(!is_dir($fullpath)) 
		      	{
		          unlink($fullpath);
		      	} 
		      	else 
		      	{
		          deldir($fullpath);
		      	}
		    }
	    }
  	}

  	//获取和考试模块相关的考点
  	function get_by_module($module_id)
  	{
  		$sql='select t.id as test_point_id,t.content as test_point_content from test_point_in_module as tpim,test_point as t where tpim.test_point_id=t.id and tpim.module_id=?';
		return $this->db->query($sql,$module_id)->result_array();
  	}

}
